..:: Menu ::.. ..:: Lekcja 4: Podstawy Object Pascala część: 8 ::.. ..::Info i Reklamy::..

Operacje matematyczne

W Object Pascal'u wykonywanie operacji matematycznych to nic trudnego. Wykorzystuje się podstawowe operatory jak = + - / *. Wszystko jasne. Chciałbym jednak omówić jeszcze dwie komendy - div, mod. Pierwsza z nich oddziela resztę z dzielenia, a druga pozostawia tylko resztę z dzielenia. Spójrz na poniższy przykład:
var
X, Y, Z : Integer;

begin
X := 13;
Y := 4;
Z := X / Y;
end.
W przykładzie tym próbujemy podzielić dwie liczby - 13 na 4. Przy próbie skompilowania pojawia się błąd: [Error] rekord.dpr(17): Incompatible types: 'Integer' and 'Extended'. Skąd on się bierze? Próbujemy podzielić dwie całkowite liczby, a następnie wynik przypisać do zmiennej, która także może przechowywać tylko liczby całkowite. Kompilator próbuje nam powiedzieć, że nie wie jaki będzie rezultat wykonanego działania i czy wynik nie będzie zmiennoprzecinkowy. Jeżeli byłby zmiennoprzecinkowy to nie może przypisać go do typu całkowitego. Jeżeli zamiast znaku / zastosujesz div:
Z := X div Y;
To wszystko będzie dobrze. Ewentualna reszta z dzielenia będzie obcięta. Możesz używać operatora / ale tylko wtedy jeżeli zmienne będą typu zmiennoprzecinkowego - np. Currency:
var
X, Y, Z : Currency;

begin
X := 13;
Y := 4;
Z := X / Y;
end.
Jeżeli wynik będzie z resztą to program ją wyświetli - jeżeli nie - wyświetli bez reszty. Istnieją w Object Pascal'u procedury, które zaokrąglają wartość zmiennoprzecinkową do góry lub na dół. Round zaokrągla do góry, a Trund na dół.
Round(2.55566); // w rezultacie da 3
Trund(2.55566); // w rezultacie da 2

Pętle

Czas przejść do elementu programowania, który występuje we wszystkich językach programowania czyli pętli...
Pętla - instrukcja, która jest wykonywana tak długo aż nie zostanie spełniony warunek jej zakończenia. Pętle można zastosować do ciągłego wykonywania tej samej czynności.

Załóżmy, ze chcesz wykonać kilka razy tę samą czynność, czyli np. kilka razy wyświetlić to samo okienko. Zamiast pisać to tak:
ShowMessage('okienko');
ShowMessage('okienko');
ShowMessage('okienko');
można zastosować pętle.

Pętla for

Jest to najprostsza ze wszystkich pętli. Stosuj ją wtedy gdy wiesz konkretnie podczas pisania programu ile razy ta pętla ma być używana. Budowa pętli for przedstawia się następująco:
var
I : Integer;

begin
for I := 0 to 3 do
{ polecenia }
end.
W tym wypadku instrukcje zawarte po słowie "do" będą wykonywane czterokrotnie. Zmienna I przechowuje wartości. Może to zabrzmieć niezrozumiale więc wyjaśniam. Po pierwszym wykonaniu danej czynności zmienna I ma wartość 0, po drugim wykonaniu wartość 1, itd., itd. Jeżeli stosujesz pętle for to zawsze musisz używać zmiennej. Regułą jest nadawanie zmiennej nazwy "I". Wiadomo wtedy, że dana zmienna wykorzystywana jest do pętli for.
Ok, budowa pętli przedstawia się następująco: na samym początku słowo kluczowe for, następnie wartość od której pętla ma się rozpoczynać - w naszym wypadku jest to 0. Po słowie "to" wartość na której pętla ma się zakończyć. Na samym końcu słowo "do" i operacje do wykonania. Jeżeli po słowie "do" jest więcej niż jedna instrukcja to należy wszystko wsiąść dodatkowo w blok begin i end. Oto treść pierwszego programu z pętlami:
{
Copyright (c) 2001 - Adam Boduch
}

program petlafor;

uses
Windows, Dialogs, SysUtils;

var
I : Integer;

begin
for I := 1 to 3 do
ShowMessage('To jest okienko nr: ' + IntToStr(i));
end.
Dodatkowo w oknie jest wyświetlony nr. okienka!

Jak dotąd wykonywaliśmy pętle od dołu do góry. Można odwrotnie - od góry do dołu. Wtedy zamiast słowa kluczowego "to" stosujemy słowo "downto".
for I := 3 downto 1 do
ShowMessage('To jest okienko nr: ' + IntToStr(i));

Pętla repeat

Przy okazji omawiania tej pętli poznasz nowe właściwości funkcji MessageBox. Otóż oprócz standardowego przycisku OK w okienku mogą być wyświetlone również inne. Np. Tak i Nie. Funkcja MessageBox zwraca również jaki przycisk został naciśnięty. W naszym przykładzie wyświetlane będzie okienko dopóki użytkownik nie naciśnie przycisku Tak.
{
Copyright (c) 2001 - Adam Boduch
}

program petlaepeat;

uses
Windows;

var
Results : Integer;

begin
{ wyświetlaj okienko dopóki użytkownik kliknie na przycisk Tak }
repeat
Results := MessageBox(0, 'Cześć! Lubisz Delphi?', 'Pytanie', MB_YESNO);
until Results = ID_YES;
end.
Zmienna Results przechowuje dane jaki przycisk został naciśnięty. Jeżeli użytkownik nacisnął przycisk Tak to zmienna Results zawiera wartość ID_YES. Jeżeli kliknął na Nie to zawiera ID_NO. Skąd to wiem? Poczytaj pomoc do Delphi. Naciśnij F1 i wpisz Messagebox, a zobaczysz informację na temat tej funkcji.
Budowa pętli jest następująca: najpierw słowo kluczowe repeat po którym następują czynności, które będą powtarzane. Na końcu słowo unitl po którym następuje sprawdzenie, czy użytkownik rzeczywiście nacisnął przycisk "Tak".
Pętla repeat BĘDZIE wykonywana przynajmniej raz w przeciwieństwie do...

Pętla while

Która to może nie zostać wykonana wcale jeżeli warunek jej wykonania został spełniony. Pętla repeat jest rzadziej używana od pętli while, ale są one do siebie podobne. Oto przykład:
var
I : Integer;

begin
I := 3; // przypisanie początekowej wartości zmiennej I
while I > 0 do // wykonuj dopóki wartość zmiennej będzie większa od 0
begin
ShowMessage('Okienko nr: ' + IntToStr(i)); // wyświetl okienko
Dec(i); // zmniejsz o jeden wartość zmiennej I
end;
end.
Zacznijmy od końca, czyli objaśnienie polecenia Dec. Otóż zmniejsza ono o jeden wartość zmiennej I. Znaczy to samo co:
I := I -1;
Istnieje także polecenie Inc, które zwiększa wartość zmiennej o jeden. Oba polecenia mogą zawierać jeden dodatkowy parametr, który "mówi" o ile wartość ma być zwiększona lub zmniejszona. Domyślnie jest to 1, ale możesz zapisać:
Inc(i, 2);
I będzie zwiększona o 2.
Wróćmy do pętli. Na samym początku zmiennej I należy przypisać wartość domyślną. W naszym przypadku będzie to 3. Sprawdź, co będzie jeżeli nie zadeklarujesz tej wartości. Program się wogule nie wykona. Tzn. nie program, a pętla. Otóż w przeciwieństwie do pętli repeat pętla while może się nie wykonać jeżeli będzie spełniony warunek jej wykonania. A jeżeli nie przypiszesz zmiennej I wartości domyślnej to Delphi zrobi to za Ciebie i będzie to cyfra 0. W pętli jest dokładnie napisane, że ma się wykonać TYLKO wtedy, gdy zmienne I będzie większa od 0. Po wykonaniu czynności, czyli wyświetleniu okienka wartość zmiennej I zostaje zmniejszona.
<--- Wstecz | Dalej --->

   
©Copyright by garUs